package inner;

/**
 * Created with IntelliJ IDEA
 * Description:实例内部类学习
 * User:22954
 * Date:2024-01-07
 * Time:15:19
 */
class Outer{
    public int data1=1;
    private int data2=2;
    class Inner/*实例内部类/非静态内部类*/{
        public int data1=11;
        public int data3=3;
        int data4=4;
        public static int data5=9;//JVM8不支持内部静态变量，JVM2.1支持
        public static final int data6=10;//JVM8 用final(常量)修饰可通过编译

        public void fuc(){
            /*Outer outer=new Outer();
            System.out.println(outer.data1);*/   //效果一样，不够简练
            System.out.println(Outer.this.data1);//在实例内部类中访问同名的外部成员变量
            System.out.println(data1);           //实例内部类访问同名的成员变量时，优先访问内部成员变量
            System.out.println(this.data1);      //this同理
            System.out.println(data2);//同一个类下，private修饰的成员变量可以被内部类访问
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }

    public void fuc2(){
        Inner inner=new Inner();
        inner.fuc();//外部类方法访问内部类时，需要先创建内部类对象，用对象访问
    }
    public void fuc1(){
        //static final int a=0; //在类方法中即使用final修饰也不能创建局部静态变量
    }
}
public class Test1 {
    public static void main(String[] args) {
        Outer.Inner inner=new Outer().new Inner();
        inner.fuc();
    }
    public static void main1(String[] args) {
        Outer outer=new Outer();                     //
        Outer.Inner inner=outer.new Inner();         //  第一种引用内部类的方法

        Outer.Inner inner1=new Outer().new Inner();  //  第二种引用内部类的方法
        inner.data5=5;
        System.out.println(inner.data5);


        final int SIZE=3;//定义常量，在编译时确定值
        //SIZE=4;        //之后不能修改
    }
}
